The technique of virtualization in information processing systems allows multiple instances of one or more operating systems (OSs) to run on a single information processing system (or “server end station”), even though each OS is designed to have complete, direct control over the system and its resources. Virtualization is typically implemented by using software such as a Virtual Machine Monitor (VMM) (or hypervisor) to present to each OS a virtual machine (VM) having virtual resources, including one or more virtual processors, that the OS may completely and directly control, while the VMM maintains a system environment for implementing virtualization policies such as sharing and/or allocating the physical resources between the VMs.
Additional types of resources that can be virtualized may include input/output (I/O) devices, where I/O devices could be controllers (e.g., bus, interconnect, and/or fabric controllers, network interface controllers (NICs), etc.), processors/accelerators (e.g., graphics processors, cryptographic accelerators, compression accelerators), and any other resources that may be addressed in the system. Various approaches to virtualization regarding I/O devices have been and continue to be developed in which I/O devices may be used and/or shared at various times by various numbers of VMs or containers.
A relatively recent development in the field of virtualization relates to the use of containers. Containers provide a mechanism to pre-package applications with underlying software package dependencies and execute them in isolated environments similar to traditional virtualization. Containers promise less overhead (and hence, allow for more density for deployments) than traditional virtual machines, and are increasingly used in hyper-scale configurations by datacenters and cloud service providers. Because containers are lightweight and incur less overhead compared to traditional VMs, they are often deployed in high densities (i.e., with many containers being executed at a particular server end station) and require provisioning of resources—including input/output (I/O) resources—at finer granularity and larger scale.
For example, recent datacenter deployment trends have shown that in many cases typical high-volume server platforms are being used to host an order of magnitude more containers than what was previously done with traditional VMs—e.g., 1000+ container instances versus 100+ VM instances. This heavy containerized usage, along with the use of high-performance I/O devices and accelerators (for I/O and compute acceleration) by emerging scale-out workloads, pushes the demand for scalable and finer grained virtualization of I/O than typically required by more traditional virtualization usages.
Accordingly, techniques for enabling scalable and/or finer-grained virtualization of I/O in devices providing containerization and/or virtualization services are strongly desired.